#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>

using namespace std;
const int N=510;
int n,k;
struct node{
	int x,y;
}d[N];
struct enode{
	int a,b;
	double w;
	bool operator < (const struct enode& p)
	{
		return w<p.w;
	}
};
double get_dist(struct node& p1,struct node& p2)
{
	double dx=p1.x-p2.x;
	double dy=p1.y-p2.y;
	return sqrt(dx*dx+dy*dy);
}
int f[N];
vector<enode> edge;
int Find(int x)
{
	if(f[x]!=x)
		f[x]=Find(f[x]);
	return f[x];
}
int main()
{
	cin>>n>>k;
	for(int i=0;i<n;i++)
	{
		cin>>d[i].x>>d[i].y;
	}
	for(int i=0;i<n;i++)
		f[i]=i;
	int pos=0;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<i;j++)
		{
			if(i==j)
				continue;
			edge.push_back({i,j,get_dist(d[i],d[j])});	
		}
	}
	sort(edge.begin(),edge.end());
	
	int cnt=n;
	double ret=0;
	for(int i=0;i<edge.size();i++)
	{
		if(cnt<=k)
			break;
		int x=Find(edge[i].a),y=Find(edge[i].b);
		if(x!=y)
		{
			f[x]=y;
			cnt--;
			ret=edge[i].w;
		}
	}
	printf("%.2lf",ret);
	return 0;
}
